#include <linux/version.h>
#include <asm/io.h>
#include <asm-xen/balloon.h>
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
#include <asm/tlbflush.h>
-#else
-#define pte_offset_kernel pte_offset
-#define pud_t pgd_t
-#define pud_offset(d, va) d
-#endif
struct dma_coherent_mem {
void *virt_base;
balloon_unlock(flags);
}
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
- dma_addr_t *dma_handle)
-#else
void *dma_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, int gfp)
-#endif
{
void *ret;
unsigned int order = get_order(size);
unsigned long vstart;
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
- int gfp = GFP_ATOMIC;
-
- if (hwdev == NULL || ((u32)hwdev->dma_mask < 0xffffffff))
- gfp |= GFP_DMA;
-#else
struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
/* ignore region specifiers */
if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
gfp |= GFP_DMA;
-#endif
vstart = __get_free_pages(gfp, order);
ret = (void *)vstart;
return ret;
}
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-void pci_free_consistent(struct pci_dev *hwdev, size_t size,
- void *vaddr, dma_addr_t dma_handle)
-{
- free_pages((unsigned long)vaddr, get_order(size));
-}
-#else
-
void dma_free_coherent(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle)
{
return mem->virt_base + (pos << PAGE_SHIFT);
}
EXPORT_SYMBOL(dma_mark_declared_memory_occupied);
-
-#endif